export default class utils {
  php_js

  static formatTime (date) {
    let year = date.getFullYear()
    let month = date.getMonth() + 1
    let day = date.getDate()

    let hour = date.getHours()
    let minute = date.getMinutes()
    let second = date.getSeconds()

    return [year, month, day].map(this.formatNumber).join('/') + ' ' +
      [hour, minute, second].map(this.formatNumber).join(':')
  }

  static formatDateTime (time, format) {

    let t = new Date(time)
    let tf = function (i) {return (i < 10 ? '0' : '') + i}
    return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) {
      switch (a) {
        case 'yyyy':
          return tf(t.getFullYear())
          break
        case 'MM':
          return tf(t.getMonth() + 1)
          break
        case 'mm':
          return tf(t.getMinutes())
          break
        case 'dd':
          return tf(t.getDate())
          break
        case 'HH':
          return tf(t.getHours())
          break
        case 'ss':
          return tf(t.getSeconds())
          break
      }
    })
  }

  static playMusic () {
    utils.runNative(function () {
      let music = new Media('/android_asset/www/media/wm.mp3',
        function (res) {
          console.log(res)
        }, function (res) {
          console.log(res)
        })
      music.play()
    })
  }

  static formatTimeStamp (time) {
    let date = new Date(time)
    let year = date.getFullYear()
    let month = date.getMonth() + 1
    let day = date.getDate()

    let hour = date.getHours()
    let minute = date.getMinutes()
    let second = date.getSeconds()

    return [year, month, day].map(this.formatNumber).join('/') + ' ' +
      [hour, minute, second].map(this.formatNumber).join(':')
  }

  static formatNumber (n) {
    n = n.toString()
    return n[1] ? n : '0' + n
  }

  static runNative (callback) {
    document.addEventListener('deviceready', callback, false)
  }

  static ksort (inputArr, sort_flags) {
    let tmp_arr = {}, keys = [], sorter, i, k, that = this, strictForIn = false,
      populateArr = {}
    switch (sort_flags) {
      case 'SORT_STRING':
        sorter = function (a, b) {
          return that.strnatcmp(a, b)
        }
        break
      case 'SORT_LOCALE_STRING':
        let loc = this.i18n_loc_get_default()
        sorter = this.php_js.i18nLocales[loc].sorting
        break
      case 'SORT_NUMERIC':
        sorter = function (a, b) {
          return ((a + 0) - (b + 0))
        }
        break
      default:
        sorter = function (a, b) {
          let aFloat = parseFloat(a),
            bFloat = parseFloat(b),
            aNumeric = aFloat + '' === a,
            bNumeric = bFloat + '' === b
          if (aNumeric && bNumeric) {
            return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0
          } else if (aNumeric && !bNumeric) {
            return 1
          } else if (!aNumeric && bNumeric) {
            return -1
          }
          return a > b ? 1 : a < b ? -1 : 0
        }
        break
    }
    for (k in inputArr) {
      if (inputArr.hasOwnProperty(k)) {
        keys.push(k)
      }
    }
    keys.sort(sorter)
    this.php_js = this.php_js || {}
    this.php_js.ini = this.php_js.ini || {}
    // END REDUNDANT
    strictForIn = this.php_js.ini['phpjs.strictForIn'] &&
      this.php_js.ini['phpjs.strictForIn'].local_value &&
      this.php_js.ini['phpjs.strictForIn'].local_value !== 'off'
    populateArr = strictForIn ? inputArr : populateArr
    for (i = 0; i < keys.length; i++) {
      k = keys[i]
      tmp_arr[k] = inputArr[k]
      if (strictForIn) {
        delete inputArr[k]
      }
    }
    for (i in tmp_arr) {
      if (tmp_arr.hasOwnProperty(i)) {
        populateArr[i] = tmp_arr[i]
      }
    }
    return strictForIn || populateArr
  }

}
